// Copyright 2021 Tier IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once

#include <geometry_msgs/PoseStamped.h>
#include <sensor_msgs/PointCloud2.h>
// #include <tier4_perception_msgs/msg/detected_objects_with_feature.hpp>

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl_conversions/pcl_conversions.h>

#include <vector>

namespace euclidean_cluster
{
    geometry_msgs::msg::Point getCentroid(const sensor_msgs::msg::PointCloud2 &pointcloud);
    void convertPointCloudClusters2Msg(
        const std_msgs::msg::Header &header,
        const std::vector<pcl::PointCloud<pcl::PointXYZ>> &clusters,
        tier4_perception_msgs::msg::DetectedObjectsWithFeature &msg);
    void convertObjectMsg2SensorMsg(
        const tier4_perception_msgs::msg::DetectedObjectsWithFeature &input,
        sensor_msgs::msg::PointCloud2 &output);
} // namespace euclidean_cluster
